Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms
Imports System.Data.SqlClient

Namespace Reportes
	Public Partial Class FrmListadoPedidos
        Inherits Form
        Dim client As New DAOCliente
        Dim pedido As New DAOPedido
		Public Sub New()
			InitializeComponent()
			lblTotal.Text = "0"
			lblTotalRemito.Text = "0"
		End Sub

		Private Sub FrmListadoPedidos_Load(sender As Object, e As EventArgs)
            txtRazonSocial.AutoCompleteCustomSource.Clear()
			'limpio cualquier cosa q tenga
            Dim dt As SqlDataReader = client.DAOcargarTextBoxCliente()
			'traigo el datareader con el rtdo de la consulta
			While dt.Read()
				'recorro
					'agrego los items
				txtRazonSocial.AutoCompleteCustomSource.Add(dt(1).ToString())
			End While

		End Sub

		Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
			If [Char].IsDigit(e.KeyChar) Then
				e.Handled = False
			ElseIf [Char].IsControl(e.KeyChar) Then
				e.Handled = False
			ElseIf [Char].IsSeparator(e.KeyChar) Then
				e.Handled = False
			Else
				e.Handled = True
			End If
		End Sub

		Private Sub txtCodClien_Validated(sender As Object, e As EventArgs)
			If txtCodClien.Text <> "" Then
				cargarNombreCliente()
				cargarGrillaPedidos()
			End If
		End Sub
		Private Sub cargarNombreCliente()
            'carga el nombre del cliente
            Dim nombre As String = ""
			Dim nroCli As Integer = Integer.Parse(txtCodClien.Text)
            nombre = client.buscarNombreCliente(nroCli)

			If nombre = "" Then
				MessageBox.Show("No existe cliente con ese numero de cliente")
				txtRazonSocial.Text = ""
				txtCodClien.Text = ""
				txtCodClien.Focus()
			Else
				txtRazonSocial.Text = nombre
			End If
		End Sub

		Private Sub cargarGrillaPedidos()
		'carga la grilla con los pedidos pedidos
			Dim idcliente As Integer = Integer.Parse(txtCodClien.Text)
            dgvPedido.DataSource = pedido.cargarGrillaPedido(idcliente)
		End Sub

		Private Sub txtRazonSocial_Validating(sender As Object, e As CancelEventArgs)
			If Me.txtRazonSocial.Text <> "" Then
                txtCodClien.Text = client.buscarIdCliente(txtRazonSocial.Text)
				'primero cargo el codigo del producto
				cargarGrillaPedidos()
			End If
		End Sub

		Private Sub dgvPedido_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs)
			Dim nro As Integer
			nro = Integer.Parse(dgvPedido.CurrentRow.Cells(0).Value.ToString())

			dgvDetalle.AutoGenerateColumns = True
            dgvDetalle.DataSource = pedido.cargarGrillaDetallePedido(nro)
			lblTotal.Text = "0"
			'al hacer double clic pongo en 0 el total del detalle
		End Sub

		'evento q permite validar los valores ingresados en la cantidad de productos a enviar
		Private Sub dgvDetalle_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs)
			Dim cantPedida As Double = Double.Parse(dgvDetalle.CurrentRow.Cells("cantidadPedida").Value.ToString())
            Dim algo As String = ""
            Dim negRemito As New NegRemito
			algo = e.FormattedValue.ToString()
			'devuelve False si la celda esta vacia la primera vez
			Try
				If String.Compare(algo, "False") <> 0 Then
					'si no hay nada en la celda deja moverte (valor cuando no hay nada)
					If String.Compare(algo, "True") <> 0 Then
						If String.Compare(algo, "") <> 0 Then
							'esto se activa cuando borramos el valor
							If IsNumeric(e.FormattedValue.ToString()) = True Then
								'lo que ingreso en la celda es un numero?
								If dgvDetalle.Rows(e.RowIndex).Cells("cantidadEnviada").Selected Then
									'el metodo lo realizo si solo es la columna cana enviar la posicionada
									If Double.Parse(e.FormattedValue.ToString()) > cantPedida Then
										'verifico que lo q ingreso no sea mayor a lo q se pide q se envie
										MessageBox.Show("No puede agregar mas de lo que pidio")
										e.Cancel = True
										Return
									Else
										'calcula el subtotal y lo agrega a la columna
										Dim valor As Double = 0
										Dim precio As Double = 0
										valor = Double.Parse(e.FormattedValue.ToString())
										precio = Double.Parse(dgvDetalle.CurrentRow.Cells("precio").Value.ToString())
                                        dgvDetalle.Rows(e.RowIndex).Cells("subtotal").Value = negRemito.calcularSubtotalPedido(valor, precio)

										lblTotal.Text = "$ " & calcularTotal("subtotal", dgvDetalle)
									End If

								End If
							Else
								MessageBox.Show("debe ingresar solo números")
								e.Cancel = True
								Return
							End If
						End If
					End If

				End If
			Catch
			End Try

		End Sub


		'metodo q retorna si el valor ingresado en la celda es numerico
		Public Function IsNumeric(Expression As Object) As Boolean
			Dim isNum As Boolean
			Dim retNum As Double

			isNum = [Double].TryParse(Convert.ToString(Expression), System.Globalization.NumberStyles.Any, System.Globalization.NumberFormatInfo.InvariantInfo, retNum)
			Return isNum
		End Function

		Private Sub btnAgregar_Click(sender As Object, e As EventArgs)
			Dim rowSelected As New List(Of DataGridViewRow)()

			For Each row As DataGridViewRow In Me.dgvDetalle.Rows
				' Se recupera el campo que representa el checkbox, y se valida la seleccion
				' agregandola a la lista temporal
				Dim cellSelecion As DataGridViewCheckBoxCell = TryCast(row.Cells("Seleccion"), DataGridViewCheckBoxCell)
				If Convert.ToBoolean(cellSelecion.Value) Then
					rowSelected.Add(row)
				End If
			Next

			' Se agrega el item seleccionado a la grilla de destino eliminando la fila de la grilla original
			For Each row As DataGridViewRow In rowSelected
					'dgvDetalle.Rows.Remove(row);
				dgvRemito.Rows.Add(New Object() {row.Cells("producto").Value, row.Cells("idpedido").Value, row.Cells("unidad_medida").Value, row.Cells("precio").Value, row.Cells("cantidadEnviada").Value, row.Cells("subtotal").Value})
			Next
			'dgvPedido.Enabled = false; //inhabilito la modificacion del detalle
			'dgvDetalle.Enabled = false; //inhabilito la modificacion del detalle
			lblTotalRemito.Text = "$" & calcularTotal("subtota", dgvRemito)
		End Sub

		Private Sub modifRemito_Click(sender As Object, e As EventArgs)
			dgvDetalle.Enabled = True
			'habilito el pedido y detalle para modificarlo
			dgvPedido.Enabled = True
			dgvRemito.Rows.Clear()
		End Sub

		Private Function calcularTotal(columna As String, dt As DataGridView) As String
		'le paso por parametro el nombre de columna de la grilla ya que en
		'el dgv Detalle, la columna subtotal se llama subtotal y en el remito se llama subtota!! 
			Dim rowSelected As New List(Of DataGridViewRow)()
			Dim total As Double = 0
			For Each row As DataGridViewRow In dt.Rows
				If row.Cells(columna).Value IsNot "" Then
					total = total + Convert.ToDouble(row.Cells(columna).Value)

				End If
			Next
			Return Convert.ToString(total)
		End Function

		Private Sub btnGenerarRem_Click(sender As Object, e As EventArgs)

		End Sub


	End Class
End Namespace
